package com.itheima.tlias84.controller;

import com.itheima.tlias84.dto.Student;
import com.itheima.tlias84.mapper.DeptMapper;
import com.itheima.tlias84.mapper.EmpMapper;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Autowired 一般使用在构造器赋值时和set方法赋值时
 * 所以说SpringDI注入有三种方式
 * 字段（属性）DI-> @Resource
 * 构造器DI -> @Autowired
 * set方法DI-> @Autowired
 *
 *
 * @Resource与@Autowired的使用：
 * 如果一个SpringBean类中值需要注入很少的其他Bean对象 -》优先使用@Resource
 * 如果一个SpringBean类中值需要注入很多的其他Bean对象 -》优先使用@Autowired   可以基于lombok实现构造器注入
 *
 *
 *
 *
 *
 *  springBean注入时要注意的问题：
 *  1.非bean不能调用bean
 *  2.不能形成循环依赖，如何解决？
 *
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("context")
@AllArgsConstructor
public class TestApplicationContextController {

    Student student;

    EmpMapper empMapper;

    DeptMapper demMapper;
    @Autowired
    public TestApplicationContextController(Student student, DeptMapper demMapper, EmpMapper empMapper) {
        this.student = student;
        this.demMapper = demMapper;
        this.empMapper = empMapper;
    }
}
